package com.lg.ms;


/**
 * 给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。
 * 在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/container-with-most-water
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class DD1 {
    public static void main(String[] args) {
        int[] arr = {4, 3, 2, 1, 4};
        System.out.println(maxBulk(arr));
    }

    /**
     * 使用双指针法
     *
     * 一开始两个指针分别指向 首和尾部 计算体积
     * 然后 在一条边变小的同时，体积还想比原来大，那就需要边变大
     *
     * 移动小的一方，再次计算体积，遍历完得到最大的体积
     */
    public static int  maxBulk(int [] arr) {
        int pre = 0;
        int post = arr.length - 1;
        int max = 0;
        while (pre < post) {
            max = Math.max((post - pre) * Math.min(arr[pre], arr[post]), max);
            if (arr[pre] < arr[post]) {
                pre++;
            } else {
                post--;
            }
        }
        return max;
    }

}
